WIN32用句柄HANDLE操作Windows窗口,而VC将HANDLE封装为类的一个成员变量。一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。同时,VC中每一个窗口类都可以声明为一个窗口指针来调用窗口类的成员属性和成员变量。
获得窗口句柄三种方法
1.HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
2.HWND WindowFromPoint(POINT& Point)//获得当前鼠标光标位置的窗口HWND
VC++中有关句柄和指针及其转换
1.MFC窗口的句柄和指针的转换
(1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。
(2)使用GetSafeHwnd函数取得程序所在窗口类的句柄
(3)使用FromHandle函数来通过句柄得到其想要的指针
其他的一些方法:
GetActiveWindow 取当前活动窗口句柄
AfxGetMainWnd 取主窗口句柄
GetForegroundWindow 取前台窗口句柄
FindWindow 寻找参数指定的窗口
EnumWindow 枚举窗口
2. 上下文无关设备的句柄和指针的转换
(1)this->m_hDC
(2)CDC::GetSafeHdc
(3)可以使用FromHandle函数来通过句柄得到其想要的指针
3.Gdi对象的句柄和指针的转换
(1)this->m_hObject
(2)CGdiObject::GetSafeHandle
(3)可以使用FromHandle函数来通过句柄得到其想要的指针
4.窗口、控件的指针和句柄的相互转化
(1)指针转化为句柄
在MFC应用程序中首先要获得窗口的指针,然后将其转化为句柄
CWnd* pWnd;
HANDLE hWnd = pWnd->GetSafeHwnd();
(2)句柄转化为指针
在MFC应用程序中首先获得对话框控件的句柄,然后获得其指针
HANDLE hWnd;
GetDlgItem(IDC_xxx,&hWnd);
CWnd * pWnd = FromHandle(hWnd);
获得程序窗口指针的办法
(1)获得主框架窗口指针(任何时候都可以用,只要是MFC程序中)
CWnd* pWnd = AfxGetMainWnd();
(2)获得对话框中控件指针
CWnd* pWnd = GetDlgItem(IDC_xxx);
(3)获得对话框中某控件的句柄
HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);
(4)获得GDI对象的句柄
HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();
从句柄到指针
CWnd* pWnd=CWnd::FromHandle(hWnd); //a temporary CWnd object is created and attached.
pWnd->Attach(hWnd); //Attaches a Windows window to a CWnd object
从指针到句柄
HWND hWnd=pWnd->GetSafeHandle();
hWnd=pWnd->m_hWnd;
SDK编程中窗口ID,句柄,指针三者相互转换函数
ID--HANDLE--HWND三者之间的互相转换
id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id);
id->指针-----------CWnd::GetDlgItem();
句柄->id-----------id = GetWindowLong(hWnd,GWL_ID);
句柄->指针---------CWnd *pWnd=CWnd::FromHandle(hWnd);
指针->ID-----------id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID);
GetDlgCtrlID();
指针->句柄--------hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd;
HICON->ID--------HICON hIcon = AfxGetApp()->LoadIcon(nIconID);
HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(nIconID));
本页共62段,2031个字符,3185 Byte(字节)